package com.ygp.dtp.core.reject.handler;

import com.ygp.dtp.common.enums.RejectedTypeEnum;
import com.ygp.dtp.core.reject.RejectedCountableHandler;
import org.springframework.stereotype.Component;

import java.util.concurrent.ThreadPoolExecutor;

/**
 * @description: DiscardOledestPolicy策略
 * @motto: 代码源于生活，高于生活艺术
 * @author: zhouhengzhe
 * @date: 2022/8/9 16:54
 * @since 1.0
 **/
@Component
public class RejectedCountableDiscardOldestPolicy extends ThreadPoolExecutor.DiscardOldestPolicy implements RejectedCountableHandler {
    /**
     * 该策略会丢弃任务队列中最老的一个任务，也就是当前任务队列中最先被添加进去的，马上要被执行的那个任务，并尝试再次提交；
     *
     * @param r 线程
     * @param e 线程池
     */
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
        beforeReject(e);
        super.rejectedExecution(r, e);
    }

    /**
     * 类型
     *
     * @return 返回拒绝策略类型
     */
    @Override
    public String type() {
        return RejectedTypeEnum.DISCARD_OLDEST_POLICY.getCode();
    }
}
